package com.webside.series.controller;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

import com.alibaba.fastjson.JSON;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.webside.Advertisingstatistics.model.AdDailyStatEntity;
import com.webside.Advertisingstatistics.model.AdProvinceStatEntity;
import com.webside.Advertisingstatistics.model.AdbrowerRecordsEntity;
import com.webside.base.basecontroller.BaseController;
import com.webside.dtgrid.model.Pager;
import com.webside.dtgrid.util.ExportUtils;
import com.webside.exception.AjaxException;
import com.webside.listener.BaseData;
import com.webside.listener.vo.Channel;
import com.webside.series.model.Bdictionary;
import com.webside.series.model.SeriesEntity;
import com.webside.series.service.BdictionaryService;
import com.webside.series.service.DealSeriesService;
import com.webside.series.service.SeriesService;
import com.webside.util.Common;
import com.webside.util.PageUtil;

@Controller
@Scope("prototype")
@RequestMapping("/dealseries/")
public class DealSeriesController extends BaseController {
	@Autowired
	DealSeriesService dealSeriesService;
	@Autowired
	private SeriesService seriesService;
	@Autowired
	private BdictionaryService bdictionaryService;

	@RequestMapping("listUI.html")
	public String selectAllDealSeries(Model model, Long seriesId, HttpServletRequest request) {
		try {
			Map initializedMap = new HashMap();
			PageUtil page = new PageUtil();
			initializedMap = dealSeriesService.initializedData();
			model.addAttribute("channelList", (List) initializedMap.get("channelList"));
			model.addAttribute("yearsList", (List) initializedMap.get("yearsList"));
			model.addAttribute("areasList", (List) initializedMap.get("areasList"));
			model.addAttribute("languageList", (List) initializedMap.get("languageList"));
			model.addAttribute("PositionList", (List) initializedMap.get("PositionList"));

			if (request.getParameterMap().containsKey("page")) {
				page.setPageNum(Integer.valueOf(request.getParameter("page")));
				page.setPageSize(Integer.valueOf(request.getParameter("rows")));
				page.setOrderByColumn(request.getParameter("sidx"));
				page.setOrderByType(request.getParameter("sord"));
			}
			model.addAttribute("page", page);

			return Common.BACKGROUND_PATH + "/dealSeries/list";
		} catch (Exception e) {
			throw new AjaxException(e);
		}
	}

	/**
	 * ajax分页动态加载模式
	 * 
	 * @param dtGridPager
	 *            Pager对象
	 * @throws Exception
	 */
	@RequestMapping(value = "/list.html", method = RequestMethod.POST)
	@ResponseBody
	public Object list(Model model, Long seriesId, String gridPager, Bdictionary channel, SeriesEntity seriesEntity,
			HttpServletResponse response) throws Exception {

		Map<String, Object> parameters = null;
		// 映射Pager对象
		Pager pager = JSON.parseObject(gridPager, Pager.class);
		// 创建查询参数
		SeriesEntity series = new SeriesEntity();
		// 判断是否包含自定义参数
		parameters = pager.getParameters();
		if (parameters.size() < 0) {
			parameters.put("name", null);
		}
		parameters.put("mark", "1");

		// 获取查询到的数据
		Map dealSeriesMap = new HashMap();
		dealSeriesMap = dealSeriesService.dealSeriesAllList(series);
		// 3、判断是否是导出操作
		if (pager.getIsExport()) {
			if (pager.getExportAllData()) {
				// 3.1、导出全部数据
				List<SeriesEntity> list = seriesService.queryListByPage(parameters);
				ExportUtils.exportAll(response, pager, list);
				return null;
			} else {
				// 3.2、导出当前页数据
				ExportUtils.export(response, pager);
				return null;
			}
		} else {

			// 设置分页，page里面包含了分页信息
			Page<Object> page = PageHelper.startPage(pager.getNowPage(), pager.getPageSize(), "create_time DESC");

			List<SeriesEntity> list = seriesService.queryListByPage(parameters);

			parameters.clear();
			parameters.put("isSuccess", Boolean.TRUE);
			parameters.put("nowPage", pager.getNowPage());
			parameters.put("pageSize", pager.getPageSize());
			parameters.put("pageCount", page.getPages());
			parameters.put("recordCount", page.getTotal());
			parameters.put("startRecord", page.getStartRow());
			parameters.put("exhibitDatas", list);
			return parameters;
		}

	}

	// 下拉框联动(没用到)
	@RequestMapping("channelList.html")
	@ResponseBody
	public Object getChannelList(Model model, HttpServletRequest request, String channel) {
		Map channelMap = new HashMap();
		SeriesEntity series = new SeriesEntity();
		if (null != channel.trim() && !channel.trim().equals("")) {
			series.setChannel(channel.trim());
		}
		channelMap = dealSeriesService.dealSeriesAllList(series);

		return channelMap;

	}

	@RequestMapping("getAllcode.html")
	@ResponseBody
	public Object getAllCode(String code) {
		List<Channel> channels = BaseData.channels;
		for (Channel channel : channels) {
			if (channel.getCode().equals(code)) {
				return channel.getAllChannels();
			}
		}
		return null;
	}

	@RequestMapping("getDramaTypes.html")
	@ResponseBody
	public Object getDramaTypeByCode(String code) {
		Bdictionary bdictionary = new Bdictionary();
		bdictionary.setCode(code);
		return bdictionaryService.selectTypeByChannel(bdictionary);
	}

	@RequestMapping("getSerieKinds.html")
	@ResponseBody
	public Object getSerieKindsByCode(String code) {
		Bdictionary bdictionary = new Bdictionary();
		bdictionary.setCode(code);
		return bdictionaryService.selectKindByChannel(bdictionary);
	}

	@RequestMapping("editUI.html")
	public String editUI(Model model, HttpServletRequest request, Long id) {
		try {
			Bdictionary channel = new Bdictionary();

			List<Channel> channels = BaseData.channels;
			model.addAttribute("list_channel", channels);
			// 查询年份
			List<Bdictionary> years = bdictionaryService.selectYear(channel);
			model.addAttribute("list_years", years);
			// 查询地区
			List<Bdictionary> areas = bdictionaryService.selectArea(channel);
			model.addAttribute("list_areas", areas);
			// 查询语言
			List<Bdictionary> language = bdictionaryService.selectLanguage(channel);
			model.addAttribute("list_language", language);
			// 查询等级
			List<Bdictionary> Position = bdictionaryService.selectTypeByPosition(channel);
			model.addAttribute("list_Position", Position);
			// 查询清晰度
			List<Bdictionary> clarity = bdictionaryService.selectVideoByClarity(channel);
			model.addAttribute("list_clarity", clarity);
			// 显示和隐藏
			List<Bdictionary> statusy = bdictionaryService.selectByStatus(channel);
			model.addAttribute("list_statusy", statusy);

			// editUI查询
			SeriesEntity seriesEntity = seriesService.findById(id);
			// 查询频道分类

			List<Bdictionary> serieKinds = (List<Bdictionary>) getSerieKindsByCode(seriesEntity.getChannel());
			model.addAttribute("list_serieKinds", serieKinds);
			// 查询剧情类型

			List<Bdictionary> dramaTypes = (List<Bdictionary>) getDramaTypeByCode(seriesEntity.getChannel());
			model.addAttribute("list_dramaTypes", dramaTypes);
			System.out.println(dramaTypes.size());
			PageUtil page = new PageUtil();
			page.setPageNum(Integer.valueOf(request.getParameter("page")));
			page.setPageSize(Integer.valueOf(request.getParameter("rows")));
			page.setOrderByColumn(request.getParameter("sidx"));
			page.setOrderByType(request.getParameter("sord"));

			model.addAttribute("page", page);
			model.addAttribute("seriesEntity", seriesEntity);
			return Common.BACKGROUND_PATH + "/dealSeries/form";
		} catch (Exception e) {
			throw new AjaxException(e);
		}
	}

	// 将聚剧集改为已处理
	@RequestMapping("updateStatus.html")
	@ResponseBody
	public Object updateStatus(String ids) {
		System.out.println(ids);
		Map<String, Object> result = new HashMap<String, Object>();
		SeriesEntity entity = new SeriesEntity();
		try {
			String[] seriesIds = ids.split(",");
			List<Long> list = new ArrayList<Long>();
			for (String string : seriesIds) {
				list.add(Long.valueOf(string));
			}
			int cnt = seriesService.updateDispose(list);
			
			if (cnt == list.size()) {
				result.put("success", true);
				result.put("data", null);
				result.put("message", "处理成功");
			} else {
				result.put("success", false);
				result.put("data", null);
				result.put("message", "处理失败");
			}
		} catch (Exception e) {
			throw new AjaxException(e);
		}
		return result;
	}

}
